/**
 * @name: 网络请求封装
 * @tip: 包括接口路径及axios
 */
import qs from 'qs'
import router from "../router"
import Vue from 'vue'
import axios from 'axios'
import { Loading, Message } from 'element-ui'
import {removeToken,getToken} from "./auth"

var _this = new Vue();

if(process.env.NODE_ENV == 'development'){
	Vue.prototype.$baseurl = 'http://60.173.195.243:9666/sqyx';
} else{
	Vue.prototype.$baseurl = 'http://api.etubang.com/sqyx';
}

export const http = (opts) => {
	return new Promise((resolve, reject) => {
		//请求配置项
		let option = {
			method: opts.method ? opts.method : 'POST',
			url: Vue.prototype.$baseurl + opts.url,
			responseType: opts.responseType || '',//导出excel表格所需要的--默认传空--不加excel出现乱码
			timeout: 10000,
			headers: {}
		};

		let token = getToken();
		console.log('opts',opts)
		//如果以POST/GET方式请求，则改变请求头及数据请求方式
		if(option.method && option.method.toLocaleLowerCase() === 'get') {
			if(opts.data) option.params = opts.data;
		} else {
			//根据字段contentType动态设置‘Content-Type’的类型

			option.headers['Content-Type'] = opts.contentType==='form' ? 'application/x-www-form-urlencoded; charset=UTF-8': 'application/json'
			//当头的contenttype的类型为json时--不要qs转换
			if(opts.data) option.data =opts.contentType==='form' ?  qs.stringify(opts.data):opts.data
		}
		option.headers['Authorization'] = token
		// option.headers['token'] = token
		//loading对象
		var _loading = null;

		if(opts.loading) {
			_loading = Loading.service({
				lock: true, // 是否锁屏
				text: '加载中...', // 加载动画的文字
				spinner: 'el-icon-loading',  //加载动画的icon
				background: 'rgba(0, 0, 0, 0.7)', // 背景颜色
			});
		}

		/**
		 * @params:isloading字段来设置表格的加载效果
		 * isLoading为true-->模拟展示loading状态（接口请求比较快--人为展示一个加载效果）
		 * */
		if(opts.isLoading === true){
			_this.$store.commit('setTableLoad', true);
		}
		//发动请求
		axios(option).then(obj => {
			let res = obj.data;
			if(res.code === 200 || !res.code) {//为了导出的excel接口  其没有返回值code--所以要多做一步判断
				resolve(res);
			} else {
				// Message.error(res.message);
				reject(res.msg);
				if(res.code === 401) {
					//用户未登录--无权限操作
					Message.warning('您暂无权限进行此操作！');
					return;
				}else if(res.code === 1502){
					removeToken();
					router.push({ path:'/login' });
					return;
				}
				Message.warning(res.message);
			}
		}).catch((err) => {
			if(err.response === undefined && JSON.stringify(err).indexOf('timeout') !== -1){
				return Message.error('接口请求异常!');
			}
			reject(err);
			Message.error(err.response.data.message);
		}).finally(()=>{
			if(_loading) _loading.close();
			setTimeout(() => {
				_this.$store.commit('setTableLoad', false);
			},300)
		});

	});
}

Vue.prototype.$http = http;

